//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//

import AWSPinpoint
import Foundation

/// Methods copied from `AWSPinpointTargetingClient`
protocol AWSPinpointTargetingClientBehavior {
    /**
     * Returns the current endpoint.
     * @return (id<AWSPinpointEndpoint>)
     */
    func currentEndpointProfile() -> AWSPinpointEndpointProfile

    /**
     * Sends an update of the current endpoint
     */
    func updateEndpointProfile() -> AWSTask<AnyObject>

    /**
     * Updates with the provided endpoint profile, AWSPinpointTargetingClient attributes and metrics are added to the
     *  profile.
     */
    func update(_ endpointProfile: AWSPinpointEndpointProfile) -> AWSTask<AnyObject>

    /**
     * Adds the specified attribute to the current endpoint profile generated by this client.
     * @param theValue A list of strings with the values of the attribute
     * @param theKey the name of the attribute to add
     */
    func addAttribute(_ theValue: [Any], forKey theKey: String)

    /**
     * Removes the specified attribute from the current endpoint profile generated by this client.
     * @param theKey the key of the attribute to remove
     */
    func removeAttribute(forKey theKey: String)

    /**
     * Adds the specified metric to the current endpoint profile generated by this client.
     * @param theValue the value of the metric
     * @param theKey the name of the metric to add
     */
    func addMetric(_ theValue: NSNumber, forKey theKey: String)

    /**
     * Removes the specified metric from the current endpoint profile generated by this client.
     * @param theKey the key of the metric to remove
     */
    func removeMetric(forKey theKey: String)
}
